package com.example.service;

import com.example.pojo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * ClassName:problemService
 * Description:
 *
 * @Author 赵永峰
 * @Create 2024/6/13 17:30
 * @Version 1.0
 */
public interface problemService {
    //插入一行数据
    void insertOne(problemPojo problemPojo);
    //加载时，筛选列表出来
    List<problemPojo> problemAllList();
    //向数据库中写入数据，根据id
    void upDataField(Map<String, Object> parameters);
    //编辑问题，把问题保存到数据库中(数字类）
    void upDataFieldNmb(Map<String, Object> parameters);
    //根据用户的条件，进行筛选
    List<problemPojo> problemAllListType(Map<String, Object> parameters);
    //修改问题选项
    void problemAddEdit(problemPojo problemPojo);
    //按照录入日期查询根据不同的条件，有是不是我自己的，是不是未结题的，然后是那天录入的
    List<problemPojo> problemInputDateQuery(Map<String, Object> parameters);
    //上传问题描述位置照片
    String describeAnnex(MultipartFile file, Integer id, String describeAnnex);
    //删除文件的函数
    String oilPictureRemove(Map<String, Object> parameters);
    //从新问题库中，查询某一个字段，等于多个值的数据
    List<problemDataPojo> inquiryProblemOneFindSeveralVal(Map<String, Object> map);
    //修改新问题库中的某一行，修改所有的字段
    void editOneAll(problemDataPojo pojo);
    //批量对问题索赔单的数据进行插入
    void insertWarrantyList(List<warrantyClaimsPojo> warrantyClaimsPojoList);
    void insertWarrantyListCBU(List<warrantyClaimsCBUPojo> warrantyClaimsCBUPojoList);
    void insertWarrantyListKD(List<warrantyClaimsKDPojo> warrantyClaimsKDPojoList);
    //查询出所有的索赔信息
    List<warrantyClaimsPojo> inquiryWarrantyClaimAll();
    List<warrantyClaimsCBUPojo> inquiryWarrantyClaimCBUAll();
    List<warrantyClaimsKDPojo> inquiryWarrantyClaimKDAll();

    //辅助函数，对售后索赔单的字段进行修改，根据id，修改多个字段，字段名称需要按照‘/’隔开，val也是一样的，并且需要和字段对应
    void editWarrantyClaimField(Map<String, Object> map);
    void editWarrantyClaimCBUField(Map<String, Object> map);
    void editWarrantyClaimKDField(Map<String, Object> map);

    //辅助函数，根据id，向后端进行筛选问题库所有的数据
    problemDataPojo inquiryProblemById(Map<String, Object> map);
    //辅助函数，在索赔单中，查询出所有的IPTV问题，通过一个IPTV类型，找到所有不为空的数据
    List<warrantyClaimsPojo> inquiryWarrantyClaimOneFiledNoVoid(String filedName);
    List<warrantyClaimsCBUPojo> inquiryWarrantyClaimCBUOneFiledNoVoid(String filedName);
    List<warrantyClaimsKDPojo> inquiryWarrantyClaimKDOneFiledNoVoid(String filedName);
    //辅助函数，在索赔单中，查询出用户指定的IPTV类型，指定的月份的数据，采用的是一个字段，等于多个值的方法,值需要用’/‘隔开，查询的都是字符串
    List<warrantyClaimsPojo> inquiryWarrantyClaimOneFiledSeveral(Map<String, Object> map);
    List<warrantyClaimsCBUPojo> inquiryWarrantyClaimCBUOneFiledSeveral(Map<String, Object> map);
    List<warrantyClaimsKDPojo> inquiryWarrantyClaimKDOneFiledSeveral(Map<String, Object> map);
    //辅助函数：调取所有的不良品信息
    List<noGoodPartAssPojo> inquiryNoGoodPartAll();
    //辅助函数：向后端的不合格品库中写入代码，需要写入多个字段
    void editNoGoodDataField(Map<String, Object> map);
    //辅助函数：查询零公里所有的数据
    List<zeroKilometersPojo> inquiryZeroKilometersAll();
    //辅助函数，对零公里的清单中，插入一行数据
    void inertZeroKilometersOne(zeroKilometersPojo pojo);
    //辅助函数，对零公里清单中（记录的不是零公里，是所有的问题），根据一个字段，查询等于该字段的所有数据,是字符串的
    List<zeroKilometersPojo> inquiryOneFieldZeroKilometers(Map<String, Object> map);
    //辅助函数，对零公里清单中（记录的不是零公里，是所有的问题），根据id，修改一行的多个字段，每个字段用’/‘隔开，内容同样用’/‘隔开，类型也用’/'隔开
    void editZeroKilometersField(Map<String, Object> map);
    //辅助函数：对不良品库中，根据一个字段，查询这个字段等于某一值，可以等于多个值，每个值中间有‘/’隔开；配的是类型；
    List<noGoodPartAssPojo> inquiryNoGoodFiledSeveral(Map<String, Object> map);
    //辅助函数：向后端IPTV报告中筛选数据，可以实现筛选多个等段同时等于多个数值，最多可以为10个。
    List<iptvReportDataPojo> inquiryIptvReportSeveralField(Map<String, Object> map);
    //插入一行IPTV报告，所有的字段都插入
    void insertOneIptvReport(iptvReportDataPojo pojo);
    //根据id，修改IptvReport中所有的数据
    void editOneLineIptvReport(iptvReportDataPojo pojo);
    //辅助函数：向后端IPTV报告中查询所有的数据
    List<iptvReportDataPojo> inquiryIptvReportAll();
    //辅助函数，对零公里清单中（记录的不是零公里，是所有的问题），修改一行所有的数据
    void editZeroKilometersOneAllById(zeroKilometersPojo pojo);
    //辅助函数，对零公里清单中（记录的不是零公里，是所有的问题），根据一个字段，查询等于该字段的所有数据,是整数型的，主要用于int
    List<zeroKilometersPojo> inquiryOneFieldZeroKilometersInt(Map<String, Object> map);
    //辅助函数，在索赔单中，根据一个字段，查询出这个字段等于某一个值或者多个字的数据，值需要用’/‘隔开，用在查询int格式上
    List<warrantyClaimsPojo> inquiryWarrantyClaimOneFiledSeveralInt(Map<String, Object> map);
    //辅助函数，在索赔单中，根据一个字段，查询这个字段的一个范围,用在查询字符串类型的，主要用在了查询文本格式保存的时间上
    List<warrantyClaimsPojo> inquiryWarrantyClaimOneFiledScope(Map<String, Object> map);
    //辅助函数，在不良品记录表中，查询有多少条数据
    Integer inquiryNoGoodPartTotal();
    //辅助函数：对不良品筛选，页数、每页最大数，按照输入的字段排倒序进行筛选
    List<noGoodPartAssPojo> inquiryPaginationNoGoodPart(Map<String, Object> map);

    //辅助函数：向后端查询售后索赔单有分析中的总数
    Integer queryAnalyzingQuantity();
    //辅助函数：向后端查询售后索赔单有多少条数据
    Integer inquiryWarrantyClaimTotal();
    //辅助函数：对索赔单（俄动力）筛选，页数、每页最大数，按照输入的字段排倒序进行筛选
    List<warrantyClaimsPojo> inquiryPaginationWarrantyClaim(Map<String, Object> map);
    //辅助函数：向后端查询CBU售后索赔单有多少条数据
    Integer inquiryWarrantyClaimCBUTotal();
    //辅助函数：对CBU索赔单（俄动力）筛选，页数、每页最大数，按照输入的字段排倒序进行筛选
    List<warrantyClaimsCBUPojo> inquiryPaginationWarrantyClaimCBU(Map<String, Object> map);
    //辅助函数：向后端查询KD售后索赔单有多少条数据
    Integer inquiryWarrantyClaimKDTotal();
    //辅助函数：对KD索赔单（俄动力）筛选，页数、每页最大数，按照输入的字段排倒序进行筛选
    List<warrantyClaimsKDPojo> inquiryPaginationWarrantyClaimKD(Map<String, Object> map);

    //修改售后索赔单中是否返件字段
    void editOneById(warrantyClaimsPojo pojo);
    void editOneByIdCBU(warrantyClaimsCBUPojo pojo);
    void editOneByIdKD(warrantyClaimsKDPojo pojo);

    //筛选索赔单中多个筛选变量iptv
    List<warrantyClaimsPojo> filterWarrantyClaims(Map<String, Object> map);
    //筛选索赔单中多个筛选变量的总数iptv
    Integer filterWarrantyClaimsQuantity(Map<String, Object> map);

    //筛选索赔单中多个筛选变量Engine
    List<warrantyClaimsPojo> filterWarrantyClaimsEngine(Map<String, Object> map);
    //筛选索赔单中多个筛选变量的总数Engine
    Integer filterWarrantyClaimsQuantityEngine(Map<String, Object> map);

    //筛选索赔单中多个筛选变量Parts
    List<warrantyClaimsPojo> filterWarrantyClaimsParts(Map<String, Object> map);
    //筛选索赔单中多个筛选变量的总数Parts
    Integer filterWarrantyClaimsQuantityParts(Map<String, Object> map);

    //筛选索赔单中多个筛选变量ClaimNumber
    List<warrantyClaimsPojo> filterWarrantyClaimsClaimNumber(Map<String, Object> map);
    //筛选索赔单中多个筛选变量的总数ClaimNumber
    Integer filterWarrantyClaimsQuantityClaimNumber(Map<String, Object> map);

    //筛选索赔单中多个筛选变量IsAnalyzeEnd
    List<warrantyClaimsPojo> filterWarrantyClaimsIsAnalyzeEnd(Map<String, Object> map);
    //筛选索赔单中多个筛选变量的总数IsAnalyzeEnd
    Integer filterWarrantyClaimsQuantityIsAnalyzeEnd(Map<String, Object> map);

    //筛选索赔单中多个筛选变量IsReport
    List<warrantyClaimsPojo> filterWarrantyClaimsIsReport(Map<String, Object> map);
    //筛选索赔单中多个筛选变量的总数IsReport
    Integer filterWarrantyClaimsQuantityIsReport(Map<String, Object> map);

    //在返件清单页面搜索索赔单、CBU、KD中的索赔编号
    List<warrantyClaimsPojo> searchClaimNumber(Map<String, Object> map);
    List<warrantyClaimsCBUPojo> searchClaimNumberCBU(Map<String, Object> map);
    List<warrantyClaimsKDPojo> searchClaimNumberKD(Map<String, Object> map);

    //查询所有索赔单数据
    List<warrantyClaimsPojo> queryAll();
    //查询所有索赔单数据CBU
    List<warrantyClaimsCBUPojo> queryAllCBU();
    //查询所有索赔单数据KD
    List<warrantyClaimsKDPojo> queryAllKD();

    //查找问题清单对应索赔单中的零部件编号
    List<problemDataPojo> inquiryProblemByDrawingPart(String mainPartCode);

    //删除问题清单问题明细中某条关联索赔单的数据（修改两个字段）
    void editTwoFields(Map<String, Object> map);

    //修改售后索赔单中是否分析完成字段
    void editIsAnalyzeEnd(warrantyClaimsPojo pojo);
    //修改售后索赔单中是否汇报字段
    void editIsReport(warrantyClaimsPojo pojo);
}
